﻿using System;
using System.Collections.Generic;
using System.Text;
using Analysis.SimpleLayer;
using System.Data.SqlClient;
using System.Data;
using System.IO;
using System.Windows.Forms;

namespace Analysis.Business
{
    public class dbMikro : IDisposable
    {
        public bool CreateTable()
        {
            try
            {
                StringBuilder sb = new StringBuilder();
                sb.Append(" if not exists(select * FROM INFORMATION_SCHEMA.TABLES where TABLE_NAME = N'FIYAT_FARKI_FATURA_DETAYLARI') \r\n ");
                sb.Append(" CREATE TABLE [dbo].[FIYAT_FARKI_FATURA_DETAYLARI]([sth_RECno] [int] NOT NULL,[cha_RECno] [int] NOT NULL,[sto_RECno] [int] NOT NULL,[sth_miktar] [float] NOT NULL,[sth_fiyat] [float] NOT NULL,[fark_tutari] [float] NOT NULL,[depo_no] [int] NOT NULL \r\n ");
                sb.Append(" CONSTRAINT [PK_FIYAT_FARKI_FATURA_DETAYLARI] PRIMARY KEY CLUSTERED ([sth_RECno] ASC )) ON [PRIMARY] \r\n; ");
                sb.Append(" if not exists(select * FROM INFORMATION_SCHEMA.TABLES where TABLE_NAME = N'FIYAT_FARKI_KESILEN_EVRAKLAR') \r\n ");
                sb.Append(" CREATE TABLE [dbo].[FIYAT_FARKI_KESILEN_EVRAKLAR]([cha_RECno] [int] NOT NULL,[cari_RECno] [int] NOT NULL,[cha_kesildi] [bit] NOT NULL,[cha_fiyat_farki] [float] NOT NULL,[cha_meblag] [float] NOT NULL,[cha_tarih] [datetime] NULL,evrak_seri varchar(25) null,evrak_sira int null \r\n ");
                sb.Append(" CONSTRAINT [PK_FIYAT_FARKI_KESILEN_EVRAKLAR] PRIMARY KEY CLUSTERED ([cha_RECno] ASC)) ON [PRIMARY] ");
                Factory.GetFactory.ExecuteNonQuery(sb.ToString());
                return true;
            }
            catch (Exception ex)
            {
                MessageBox.Show(string.Format("Hata Oluştu !\r\n {0}", ex.Message));
                return false;
            }
        }

        public bool EvrakEkle(int recNo, int cari, decimal meblag, decimal fiyatfarki, bool kesildi)
        {
            try
            {
                StringBuilder sb = new StringBuilder();
                sb.Append(" if exists(select    cha_RECno from  FIYAT_FARKI_KESILEN_EVRAKLAR where     (cha_RECno = @recno)) ");
                //sb.Append(" update   FIYAT_FARKI_KESILEN_EVRAKLAR set cari_RECno = @cari, cha_meblag = @meblag, cha_fiyat_farki = @fark, cha_kesildi=@kesildi where     (cha_RECno = @recno) \r\n");
                sb.Append(" update   FIYAT_FARKI_KESILEN_EVRAKLAR set cari_RECno = @cari, cha_meblag = @meblag, cha_fiyat_farki = @fark where     (cha_RECno = @recno) \r\n");
                sb.Append(" else insert into  FIYAT_FARKI_KESILEN_EVRAKLAR (cha_RECno, cari_RECno, cha_meblag, cha_fiyat_farki,cha_kesildi) values (@recno,@cari,@meblag,@fark,@kesildi) \r\n");

                SqlParameter prm1 = new SqlParameter("@recno", SqlDbType.Int);
                SqlParameter prm2 = new SqlParameter("@cari", SqlDbType.Int);
                SqlParameter prm3 = new SqlParameter("@meblag", SqlDbType.Decimal);
                SqlParameter prm4 = new SqlParameter("@fark", SqlDbType.Decimal);
                SqlParameter prm5 = new SqlParameter("@kesildi", SqlDbType.Bit);

                prm1.Value = recNo;
                prm2.Value = cari;
                prm3.Value = meblag;
                prm4.Value = fiyatfarki;
                prm5.Value = kesildi;
                Factory.GetFactory.ExecuteNonQuery(CommandType.Text, sb.ToString(), prm1, prm2, prm3, prm4, prm5);
                return true;
            }
            catch (Exception ex)
            {
                MessageBox.Show(string.Format("Hata Oluştu !\r\n {0}", ex.Message));
                return false;
            }
        }
        void SenkronYaz(DateTime tarih)
        {
            StreamWriter sw = new StreamWriter("senkron.txt", false);
            sw.WriteLine(tarih.Year + "-" + tarih.Month + "-" + tarih.Day);
            sw.Close();
        }
        public DateTime SenkronOku()
        {
            if (File.Exists("senkron.txt"))
            {
                StreamReader sr = new StreamReader("senkron.txt");
                string line = sr.ReadLine();
                sr.Close();
                string[] alanlar = line.Split('-');
                return new DateTime(int.Parse(alanlar[0]), int.Parse(alanlar[1]), int.Parse(alanlar[2]));
            }
            else
                return new DateTime(1990, 1, 1);
        }
        Decimal netFiyat(decimal miktar, decimal isk1, decimal isk2, decimal isk3, decimal isk4, decimal isk5, decimal isk6, decimal tutar)
        {
            return (tutar - isk1 - isk2 - isk3 - isk4 - isk5 - isk6) / miktar;
        }

        private string AnaCari(string cariKod)
        {
            return Factory.GetFactory.ExecuteScaler(string.Format("SELECT     ISNULL(cari_Ana_cari_kodu, '') FROM  CARI_HESAPLAR WITH (NOLOCK) WHERE     (cari_kod = '{0}')", cariKod)).ToString();
        }

        public decimal iskontoBul(string stokKod, string cariKod, DateTime evrakTarihi, int depoNo)
        {
            decimal sonuc = iskontoGetir(stokKod, cariKod, evrakTarihi, depoNo);
            if (sonuc == -1)
            {
                string anacari = AnaCari(cariKod);
                if (!string.IsNullOrEmpty(anacari))
                {
                    sonuc = iskontoGetir(stokKod, anacari, evrakTarihi, depoNo);
                }
                else
                {
                    sonuc = -1;
                }
            }
            return sonuc;
        }

        public decimal iskontoGetir(string stokKod, string cariKod, DateTime evrakTarihi, int depoNo)
        {
            decimal sonuc = -1;

            try
            {
                StringBuilder sb = new StringBuilder();
                sb.Append("SELECT     TOP 1 sas_brut_fiyat, sas_isk_miktar1, sas_isk_miktar2, sas_isk_miktar3, sas_isk_miktar4, sas_isk_miktar5, sas_isk_miktar6 \r\n");
                sb.Append(" FROM         SATINALMA_SARTLARI WITH (NOLOCK, INDEX = NDX_SATINALMA_SARTLARI_07) \r\n");
                sb.Append(" WHERE     (sas_cari_kod = @cari) AND (sas_stok_kod = @stok) AND (sas_depo_no = @depo OR sas_depo_no = 0 OR sas_depo_no IS NULL) AND (sas_basla_tarih <= @tarih) AND (sas_bitis_tarih >= @tarih OR sas_bitis_tarih <= @tarih2) \r\n");
                sb.Append(" ORDER BY sas_evrtipi DESC,sas_depo_no DESC, sas_basla_tarih DESC, sas_RECno DESC, sas_bitis_tarih DESC \r\n");

                string tarih = evrakTarihi.Year.ToString("0000") + evrakTarihi.Month.ToString("00") + evrakTarihi.Day.ToString("00");

                SqlParameter prm1 = new SqlParameter("@tarih", System.Data.SqlDbType.VarChar, 8);
                SqlParameter prm2 = new SqlParameter("@tarih2", System.Data.SqlDbType.VarChar, 8);
                SqlParameter prm3 = new SqlParameter("@stok", System.Data.SqlDbType.VarChar, 25);
                SqlParameter prm4 = new SqlParameter("@cari", System.Data.SqlDbType.VarChar, 25);
                SqlParameter prm5 = new SqlParameter("@depo", System.Data.SqlDbType.Int);

                prm1.Value = tarih;
                prm2.Value = "19101231";
                prm3.Value = stokKod;
                prm4.Value = cariKod;
                prm5.Value = depoNo;

                DataTable dt = Factory.GetFactory.ExecuteDataTable(System.Data.CommandType.Text, sb.ToString(), prm1, prm2, prm3, prm4, prm5);
                if (dt != null)
                {
                    if (dt.Rows.Count > 0)
                    {
                        sonuc = netFiyat(1, Convert.ToDecimal(dt.Rows[0][1]), Convert.ToDecimal(dt.Rows[0][2]), Convert.ToDecimal(dt.Rows[0][3]), Convert.ToDecimal(dt.Rows[0][4]), Convert.ToDecimal(dt.Rows[0][5]), Convert.ToDecimal(dt.Rows[0][6]), Convert.ToDecimal(dt.Rows[0][0]));
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(string.Format("Hata Oluştu ! \r\n {0}", ex.Message));
            }
            return sonuc;
        }

        DataTable evrakListe(DateTime tarih)
        {
            StringBuilder sb = new StringBuilder();
            sb.Append(" SELECT     har.cha_RECno, har.cha_evrakno_seri, har.cha_evrakno_sira,har.cha_belge_tarih, har.cha_kod,car.cari_RECno, car.cari_unvan1, car.cari_temsilci_kodu,per.cari_per_mail,har.cha_meblag ");
            sb.Append(" FROM         CARI_HESAP_HAREKETLERI as har INNER JOIN CARI_HESAPLAR as car ON har.cha_kod = car.cari_kod LEFT OUTER JOIN CARI_PERSONEL_TANIMLARI as per ON car.cari_temsilci_kodu = per.cari_per_kod \r\n");
            sb.Append(" WHERE    (har.cha_tip = 1) AND (har.cha_cinsi = 6) AND (har.cha_normal_Iade = 0) AND (har.cha_evrak_tip = 0) AND  \r\n");
            //sb.Append(" WHERE    (car.cari_sektor_kodu='999') AND (har.cha_tip = 1) AND (har.cha_cinsi = 6) AND (har.cha_normal_Iade = 0) AND (har.cha_evrak_tip = 0) AND  \r\n");
            //sb.Append(" (har.cha_RECno NOT IN (SELECT     cha_RECno FROM          FIYAT_FARKI_KESILEN_EVRAKLAR)) AND (har.cha_lastup_date >= @tarih) \r\n");
            sb.Append(" (har.cha_lastup_date >= @tarih) \r\n");
            SqlParameter prm = new SqlParameter("@tarih", SqlDbType.DateTime);
            prm.Value = tarih;
            return Factory.GetFactory.ExecuteDataTable(System.Data.CommandType.Text, sb.ToString(), prm);
        }

        DataTable evrakListe(DateTime baslangicTarihi, DateTime bitisTarihi, string cariKod, string sektorKodu)
        {
            StringBuilder sb = new StringBuilder();
            sb.Append(" SELECT     har.cha_RECno, har.cha_evrakno_seri, har.cha_evrakno_sira,har.cha_belge_tarih, har.cha_kod,car.cari_RECno, car.cari_unvan1, car.cari_temsilci_kodu,per.cari_per_mail,har.cha_meblag ");
            sb.Append(" FROM         CARI_HESAP_HAREKETLERI as har INNER JOIN CARI_HESAPLAR as car ON har.cha_kod = car.cari_kod LEFT OUTER JOIN CARI_PERSONEL_TANIMLARI as per ON car.cari_temsilci_kodu = per.cari_per_kod \r\n");
            sb.Append(" WHERE     (har.cha_tip = 1) AND (har.cha_cinsi = 6) AND (har.cha_normal_Iade = 0) AND (har.cha_evrak_tip = 0) AND  \r\n");
            //sb.Append(" (har.cha_RECno NOT IN (SELECT     cha_RECno FROM          FIYAT_FARKI_KESILEN_EVRAKLAR)) AND (har.cha_belge_tarih >= @bastarih) AND (har.cha_belge_tarih <= @bittarih) AND (har.cha_kod = @cari or car.cari_sektor_kodu=@sektor) \r\n");

            sb.Append(" (har.cha_belge_tarih >= @bastarih) AND (har.cha_belge_tarih <= @bittarih) AND (har.cha_kod = @cari or car.cari_sektor_kodu=@sektor) \r\n");

            SqlParameter prm1 = new SqlParameter("@bastarih", SqlDbType.DateTime);
            SqlParameter prm2 = new SqlParameter("@bittarih", SqlDbType.DateTime);
            SqlParameter prm3 = new SqlParameter("@cari", SqlDbType.VarChar, 25);
            SqlParameter prm4 = new SqlParameter("@sektor", SqlDbType.VarChar, 25);
            prm1.Value = new DateTime(baslangicTarihi.Year, baslangicTarihi.Month, baslangicTarihi.Day, 0, 0, 0);
            prm2.Value = new DateTime(bitisTarihi.Year, bitisTarihi.Month, bitisTarihi.Day, 23, 59, 59); ;
            prm3.Value = cariKod;
            prm4.Value = sektorKodu;
            return Factory.GetFactory.ExecuteDataTable(System.Data.CommandType.Text, sb.ToString(), prm1, prm2, prm3, prm4);
        }

        public DataTable hareketDetay(int recNo)
        {
            StringBuilder sb = new StringBuilder();
            sb.Append(" SELECT     har.sth_miktar, har.sth_iskonto1, har.sth_iskonto2, har.sth_iskonto3,har.sth_iskonto4, har.sth_iskonto5, har.sth_iskonto6, har.sth_tutar,har.sth_giris_depo_no,cast(isnull(sip_RECid_RECno,0) as bit) as sipvar, \r\n");
            sb.Append(" isnull(sip.sip_miktar,0) as sip_miktar, isnull(sip.sip_iskonto_1,0) as sip_iskonto_1, isnull(sip.sip_iskonto_2,0) as sip_iskonto_2, isnull(sip.sip_iskonto_3,0) as sip_iskonto_3,isnull(sip.sip_iskonto_4,0) as sip_iskonto_4, isnull(sip.sip_iskonto_5,0) as sip_iskonto_5, isnull(sip.sip_iskonto_6,0) as sip_iskonto_6, isnull(sip.sip_tutar,0) as sip_tutar,sth_stok_kod,har.sth_RECno,(SELECT sto_RECno  FROM STOKLAR WHERE (sto_kod = har.sth_stok_kod)) as sto_RECno \r\n");
            sb.Append(" FROM         STOK_HAREKETLERI AS har LEFT OUTER JOIN  SIPARISLER as sip ON har.sth_sip_recid_dbcno = sip.sip_RECid_DBCno AND har.sth_sip_recid_recno = sip.sip_RECid_RECno \r\n");
            sb.Append(" WHERE  (sth_fat_recid_dbcno=0 AND sth_fat_recid_recno=@recNo)  \r\n");
            SqlParameter prm = new SqlParameter("@recNo", SqlDbType.Int);
            prm.Value = recNo;
            return Factory.GetFactory.ExecuteDataTable(CommandType.Text, sb.ToString(), prm);
        }

        public void FiyatFarkiHesapla(DateTime tarih)
        {
            DataTable dt = evrakListe(tarih);
            int recno;
            string seri;
            int sira;
            DateTime belgeTarih;
            string cariKod;
            string cariAdi;
            string saticiKod;
            string saticiMail;
            decimal fiyatFarki;
            int cariId;
            decimal meblag;
            decimal limit = Convert.ToDecimal(Config.GetConfig.GetValue(Parametre.farkLimit, "0"));

            for (int i = 0; i < dt.Rows.Count; i++)
            {
                recno = Convert.ToInt32(dt.Rows[i]["cha_RECno"]);
                FaturaYenidenAktar(recno.ToString());

                seri = dt.Rows[i]["cha_evrakno_seri"].ToString();
                sira = Convert.ToInt32(dt.Rows[i]["cha_evrakno_sira"]);
                belgeTarih = Convert.ToDateTime(dt.Rows[i]["cha_belge_tarih"]);
                cariKod = dt.Rows[i]["cha_kod"].ToString();
                cariAdi = dt.Rows[i]["cari_unvan1"].ToString();
                cariId = Convert.ToInt32(dt.Rows[i]["cari_RECno"]);
                meblag = Convert.ToDecimal(dt.Rows[i]["cha_meblag"]);
                saticiKod = dt.Rows[i]["cari_temsilci_kodu"].ToString();
                saticiMail = dt.Rows[i]["cari_per_mail"].ToString();
                fiyatFarki = FaturaKontrol(recno, cariKod, belgeTarih, recno);
                if (fiyatFarki > limit)
                    EvrakEkle(recno, cariId, meblag, fiyatFarki, false);
            }
            SenkronYaz(DateTime.Now);
        }

        public void FiyatFarkiHesapla(DateTime baslangicTarihi, DateTime bitisTarihi, string cariKod, string sektorKodu)
        {
            DataTable dt = evrakListe(baslangicTarihi, bitisTarihi, cariKod, sektorKodu);
            int recno;
            string seri;
            int sira;
            DateTime belgeTarih;
            string cariAdi;
            string saticiKod;
            string saticiMail;
            decimal fiyatFarki;
            int cariId;
            decimal meblag;
            decimal limit = Convert.ToDecimal(Config.GetConfig.GetValue(Parametre.farkLimit, "0"));

            for (int i = 0; i < dt.Rows.Count; i++)
            {
                recno = Convert.ToInt32(dt.Rows[i]["cha_RECno"]);
                FaturaYenidenAktar(recno.ToString());

                seri = dt.Rows[i]["cha_evrakno_seri"].ToString();
                sira = Convert.ToInt32(dt.Rows[i]["cha_evrakno_sira"]);
                belgeTarih = Convert.ToDateTime(dt.Rows[i]["cha_belge_tarih"]);
                cariKod = dt.Rows[i]["cha_kod"].ToString();
                cariAdi = dt.Rows[i]["cari_unvan1"].ToString();
                cariId = Convert.ToInt32(dt.Rows[i]["cari_RECno"]);
                meblag = Convert.ToDecimal(dt.Rows[i]["cha_meblag"]);
                saticiKod = dt.Rows[i]["cari_temsilci_kodu"].ToString();
                saticiMail = dt.Rows[i]["cari_per_mail"].ToString();
                fiyatFarki = FaturaKontrol(recno, cariKod, belgeTarih, recno);
                if (fiyatFarki > limit)
                    EvrakEkle(recno, cariId, meblag, fiyatFarki, false);
            }
        }


        void fiyat_farki_detay_ekle(int sthRecNo, int stoRecNo, int chaRECno, decimal sthMiktar, decimal sthFiyat, decimal fiyatFarki, int depo)
        {
            List<SqlParameter> prmList = new List<SqlParameter>();
            prmList.Add(new SqlParameter() { ParameterName = "@sth_RECno", SqlDbType = SqlDbType.Int, Value = sthRecNo });
            prmList.Add(new SqlParameter() { ParameterName = "@sto_RECno", SqlDbType = SqlDbType.Int, Value = stoRecNo });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_miktar", SqlDbType = SqlDbType.Float, Value = sthMiktar });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_fiyat", SqlDbType = SqlDbType.Float, Value = sthFiyat });
            prmList.Add(new SqlParameter() { ParameterName = "@fark_tutari", SqlDbType = SqlDbType.Float, Value = fiyatFarki });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_RECno", SqlDbType = SqlDbType.Int, Value = chaRECno });
            prmList.Add(new SqlParameter() { ParameterName = "@depo_no", SqlDbType = SqlDbType.Int, Value = depo });
            Factory.GetFactory.ExecuteNonQuery(CommandType.Text, "if exists(select sth_RECno from FIYAT_FARKI_FATURA_DETAYLARI where sth_RECno=@sth_RECno) update FIYAT_FARKI_FATURA_DETAYLARI set sto_RECno=@sto_RECno,sth_miktar=@sth_miktar,sth_fiyat=@sth_fiyat,fark_tutari=@fark_tutari,cha_RECno=@cha_RECno,depo_no=@depo_no where sth_RECno=@sth_RECno else insert into FIYAT_FARKI_FATURA_DETAYLARI (sth_RECno,sto_RECno,sth_miktar,sth_fiyat,fark_tutari,cha_RECno,depo_no) values (@sth_RECno,@sto_RECno,@sth_miktar,@sth_fiyat,@fark_tutari,@cha_RECno,@depo_no)", prmList.ToArray());
        }

        private class Bedelsiz
        {
            public decimal Tutar { get; set; }
            public bool Birebir { get; set; }
            public decimal TumToplam { get; set; }
        }

        Dictionary<string, Bedelsiz> BedelsizKontrol(DataTable dt, string cariKod, DateTime belgeTarihi, ref decimal toplamTutar)
        {
            decimal harMiktar, sipMiktar, harTutar, sipTutar;
            decimal harIsk1, harIsk2, harIsk3, harIsk4, harIsk5, harIsk6;
            decimal sipIsk1, sipIsk2, sipIsk3, sipIsk4, sipIsk5, sipIsk6;
            bool sipVar;
            int depo, sth_RECno, sto_RECno;
            string stokKod;
            decimal harFiyat;
            decimal sipFiyat;
            decimal satFiyat;
            decimal fiyatFarki = 0;

            Dictionary<string, Bedelsiz> stokfark = new Dictionary<string, Bedelsiz>();

            for (int i = 0; i < dt.Rows.Count; i++)
            {
                harMiktar = Convert.ToDecimal(dt.Rows[i]["sth_miktar"]);
                harTutar = Convert.ToDecimal(dt.Rows[i]["sth_tutar"]);
                harIsk1 = Convert.ToDecimal(dt.Rows[i]["sth_iskonto1"]);
                harIsk2 = Convert.ToDecimal(dt.Rows[i]["sth_iskonto2"]);
                harIsk3 = Convert.ToDecimal(dt.Rows[i]["sth_iskonto3"]);
                harIsk4 = Convert.ToDecimal(dt.Rows[i]["sth_iskonto4"]);
                harIsk5 = Convert.ToDecimal(dt.Rows[i]["sth_iskonto5"]);
                harIsk6 = Convert.ToDecimal(dt.Rows[i]["sth_iskonto6"]);
                depo = Convert.ToInt32(dt.Rows[i]["sth_giris_depo_no"]);
                stokKod = dt.Rows[i]["sth_stok_kod"].ToString();
                sth_RECno = Convert.ToInt32(dt.Rows[i]["sth_RECno"]);
                sto_RECno = Convert.ToInt32(dt.Rows[i]["sto_RECno"]);
                sipVar = Convert.ToBoolean(dt.Rows[i]["sipvar"]);

                harFiyat = Math.Round(netFiyat(harMiktar, harIsk1, harIsk2, harIsk3, harIsk4, harIsk5, harIsk6, harTutar), 4);
                toplamTutar += harFiyat * harMiktar;

                if (harFiyat == 0) //bedelsiz dir
                {
                    if (sipVar == true)
                    {
                        sipIsk1 = Convert.ToDecimal(dt.Rows[i]["sip_iskonto_1"]);
                        sipIsk2 = Convert.ToDecimal(dt.Rows[i]["sip_iskonto_2"]);
                        sipIsk3 = Convert.ToDecimal(dt.Rows[i]["sip_iskonto_3"]);
                        sipIsk4 = Convert.ToDecimal(dt.Rows[i]["sip_iskonto_4"]);
                        sipIsk5 = Convert.ToDecimal(dt.Rows[i]["sip_iskonto_5"]);
                        sipIsk6 = Convert.ToDecimal(dt.Rows[i]["sip_iskonto_6"]);
                        sipMiktar = Convert.ToDecimal(dt.Rows[i]["sip_miktar"]);
                        sipTutar = Convert.ToDecimal(dt.Rows[i]["sip_tutar"]);
                        sipFiyat = Math.Round(netFiyat(sipMiktar, sipIsk1, sipIsk2, sipIsk3, sipIsk4, sipIsk5, sipIsk6, sipTutar), 4);

                        if (harTutar / harMiktar > sipFiyat) //iskontosuz hali sipariş fiyatından büyükse
                        {
                            fiyatFarki = (harTutar / harMiktar) - sipFiyat;
                            if (!stokfark.ContainsKey(stokKod))
                                stokfark.Add(stokKod, new Bedelsiz() { Tutar = fiyatFarki * harMiktar, Birebir = false });
                            else
                            {
                                stokfark[stokKod].Tutar += fiyatFarki * harMiktar;
                                stokfark[stokKod].Birebir = true;
                            }
                        }
                    }
                    else
                    {
                        satFiyat = Math.Round(iskontoBul(stokKod, cariKod, belgeTarihi, depo), 4);
                        if (satFiyat != -1)
                            if (harTutar / harMiktar > satFiyat) //bürüt fiyat satınalma şartı fiyatından büyükse
                            {
                                fiyatFarki = (harTutar / harMiktar) - satFiyat;
                                if (!stokfark.ContainsKey(stokKod))
                                    stokfark.Add(stokKod, new Bedelsiz() { Tutar = fiyatFarki * harMiktar, Birebir = false });
                                else
                                {
                                    stokfark[stokKod].Tutar += fiyatFarki * harMiktar;
                                    stokfark[stokKod].Birebir = true;
                                }
                            }
                    }
                }
                else //bedelsiz değilse bu ürüne bağlı bedelsiz ürün varmı ?
                {
                    if (stokfark.ContainsKey(stokKod))//varsa
                    {
                        stokfark[stokKod].Birebir = true; //birebir olduğunu söylüyoruz bedelsiz tutar düşerken sadece aynı ürüne düşülecek
                        stokfark[stokKod].TumToplam += harFiyat * harMiktar;
                    }
                    else
                        stokfark.Add(stokKod, new Bedelsiz() { Tutar = 0, Birebir = false, TumToplam = harFiyat * harMiktar });

                }
            }
            return stokfark;
        }

        decimal FaturaKontrol(int recNo, string cariKod, DateTime belgeTarihi, int cha_RECno)
        {
            DataTable dt = hareketDetay(recNo);
            decimal harMiktar, sipMiktar, harTutar, sipTutar;
            decimal harIsk1, harIsk2, harIsk3, harIsk4, harIsk5, harIsk6;
            decimal sipIsk1, sipIsk2, sipIsk3, sipIsk4, sipIsk5, sipIsk6;
            bool sipVar;
            int depo, sth_RECno, sto_RECno;
            string stokKod;

            decimal harFiyat;
            decimal sipFiyat;
            decimal satFiyat;
            decimal fiyatFarki = 0;

            //bedelsiz işlemleri yapılması için parametrenin işaretlenmesi lazım
            decimal farkliUrunTutari = 0;
            decimal toplamTutar = 0;
            Dictionary<string, Bedelsiz> bedelsizStoklar = null;
            if (Config.GetConfig.GetValue(Parametre.bedelsizCikar, "Hayır") == "Evet")
            {
                bedelsizStoklar = BedelsizKontrol(dt, cariKod, belgeTarihi, ref toplamTutar);
                foreach (Bedelsiz item in bedelsizStoklar.Values)
                {
                    if (!item.Birebir)
                        farkliUrunTutari += item.Tutar; //tüm ürünlere dağıtılacak tutar hesaplanıyor.
                }
            }


            decimal bedelsizIskontosu = 0;

            for (int i = 0; i < dt.Rows.Count; i++)
            {
                harMiktar = Convert.ToDecimal(dt.Rows[i]["sth_miktar"]);
                harTutar = Convert.ToDecimal(dt.Rows[i]["sth_tutar"]);
                harIsk1 = Convert.ToDecimal(dt.Rows[i]["sth_iskonto1"]);
                harIsk2 = Convert.ToDecimal(dt.Rows[i]["sth_iskonto2"]);
                harIsk3 = Convert.ToDecimal(dt.Rows[i]["sth_iskonto3"]);
                harIsk4 = Convert.ToDecimal(dt.Rows[i]["sth_iskonto4"]);
                harIsk5 = Convert.ToDecimal(dt.Rows[i]["sth_iskonto5"]);
                harIsk6 = Convert.ToDecimal(dt.Rows[i]["sth_iskonto6"]);
                depo = Convert.ToInt32(dt.Rows[i]["sth_giris_depo_no"]);
                stokKod = dt.Rows[i]["sth_stok_kod"].ToString();
                sth_RECno = Convert.ToInt32(dt.Rows[i]["sth_RECno"]);
                sto_RECno = Convert.ToInt32(dt.Rows[i]["sto_RECno"]);
                sipVar = Convert.ToBoolean(dt.Rows[i]["sipvar"]);

                harFiyat = Math.Round(netFiyat(harMiktar, harIsk1, harIsk2, harIsk3, harIsk4, harIsk5, harIsk6, harTutar), 4);
                bedelsizIskontosu = 0;

                if (harFiyat > 0 && farkliUrunTutari > 0) //bedelsiz olmayan ürünlerin fiyatlarından bedelsiz tutarı düşecek 
                {
                    decimal oran = (harFiyat * harMiktar) * 100 / toplamTutar; //bu ürünün faturada ki ağırlıklı ortalaması
                    bedelsizIskontosu += (farkliUrunTutari * oran / 100); //kendisine düşen pay fiyattan düşülüyor
                }

                //birebir ürünler için uygulama
                if (Config.GetConfig.GetValue(Parametre.bedelsizCikar, "Hayır") == "Evet") //bedelsiz kontrolü varmı
                {
                    if (harFiyat > 0 && bedelsizStoklar.ContainsKey(stokKod)) //bedelsiz değilse
                    {
                        decimal oran = (harFiyat * harMiktar) * 100 / bedelsizStoklar[stokKod].TumToplam; //bedelsiz olmayan aynı ürün veya ürünlerin tüm satır toplamindan sadece bu satırın oranı
                        bedelsizIskontosu += (bedelsizStoklar[stokKod].Tutar * oran / 100);
                    }
                }

                harFiyat = ((harFiyat * harMiktar) - bedelsizIskontosu) / harMiktar;

                if (sipVar == true)
                {
                    sipIsk1 = Convert.ToDecimal(dt.Rows[i]["sip_iskonto_1"]);
                    sipIsk2 = Convert.ToDecimal(dt.Rows[i]["sip_iskonto_2"]);
                    sipIsk3 = Convert.ToDecimal(dt.Rows[i]["sip_iskonto_3"]);
                    sipIsk4 = Convert.ToDecimal(dt.Rows[i]["sip_iskonto_4"]);
                    sipIsk5 = Convert.ToDecimal(dt.Rows[i]["sip_iskonto_5"]);
                    sipIsk6 = Convert.ToDecimal(dt.Rows[i]["sip_iskonto_6"]);
                    sipMiktar = Convert.ToDecimal(dt.Rows[i]["sip_miktar"]);
                    sipTutar = Convert.ToDecimal(dt.Rows[i]["sip_tutar"]);
                    sipFiyat = Math.Round(netFiyat(sipMiktar, sipIsk1, sipIsk2, sipIsk3, sipIsk4, sipIsk5, sipIsk6, sipTutar), 4);
                    if (harFiyat > sipFiyat)
                    {
                        fiyat_farki_detay_ekle(sth_RECno, sto_RECno, cha_RECno, harMiktar, harFiyat, (harMiktar * (harFiyat - sipFiyat)), depo);
                        fiyatFarki += (harMiktar * (harFiyat - sipFiyat));
                    }
                }
                else
                {
                    satFiyat = Math.Round(iskontoBul(stokKod, cariKod, belgeTarihi, depo), 4);
                    if (satFiyat != -1)
                        if (harFiyat > satFiyat)
                        {
                            fiyat_farki_detay_ekle(sth_RECno, sto_RECno, cha_RECno, harMiktar, harFiyat, (harMiktar * (harFiyat - satFiyat)), depo);
                            fiyatFarki += (harMiktar * (harFiyat - satFiyat));
                        }
                }
            }
            return fiyatFarki;
        }

        public DataTable KesilenFiyatFarklari()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("select *,([Program Fark Fatura Tutari] - [Mikro Fark Fatura Tutari]) as [Fark] FROM (SELECT     cari.cari_kod AS [Cari Kodu], cari.cari_unvan1 AS [Cari Ünvanı], cari.cari_unvan2 AS [Cari 2.Ünvanı],SUM(har.cha_meblag) AS [Toplam Alış Tutarı], SUM(fark.cha_fiyat_farki) AS [Kesilen Fiyat Farkı Tutarı],fark.cha_RECno as id,har.cha_belge_tarih as [Belge Tarihi],cast(0 as bit) as [Kesilsin],cari.cari_EMail,har.cha_belge_no AS [Belge No],har.cha_evrakno_seri AS [Fatura Seri], har.cha_evrakno_sira AS [Fatura Sıra],har.cha_meblag AS [Fatura Tutarı],fark.cha_fiyat_farki AS [Fiyat Farkı Tutarı],fark.evrak_seri as [Evrak Seri],fark.evrak_sira as [Evrak Sıra], \r\n");
            sb.Append("isnull((SELECT     cha_aratoplam FROM         CARI_HESAP_HAREKETLERI  WHERE     (cha_tip = 0) AND (cha_cinsi = 15) AND  (cha_normal_Iade = 1) AND (cha_evrak_tip = 63) AND (cha_evrakno_seri = fark.evrak_seri) AND (cha_evrakno_sira = fark.evrak_sira)),0) as [Mikro Fark Fatura Tutari],");
            sb.Append("isnull((SELECT     SUM(cha_fiyat_farki) FROM         FIYAT_FARKI_KESILEN_EVRAKLAR WHERE     (evrak_seri = fark.evrak_seri) AND (evrak_sira = fark.evrak_sira)),0) as [Program Fark Fatura Tutari] ");
            sb.Append(" FROM         FIYAT_FARKI_KESILEN_EVRAKLAR as fark INNER JOIN CARI_HESAP_HAREKETLERI as har ON fark.cha_RECno = har.cha_RECno INNER JOIN CARI_HESAPLAR as cari ON fark.cari_RECno = cari.cari_RECno \r\n");
            sb.Append(" WHERE     (fark.cha_kesildi = 1)  GROUP BY cari.cari_kod, cari.cari_unvan1, cari.cari_unvan2,fark.cha_RECno,har.cha_belge_tarih,cari.cari_EMail,har.cha_belge_no,har.cha_evrakno_seri, har.cha_evrakno_sira,har.cha_meblag,fark.cha_fiyat_farki,fark.evrak_seri,fark.evrak_sira) as tbl \r\n");
            return Factory.GetFactory.ExecuteDataTable(sb.ToString());
        }

        public DataTable KesilecekFiyatFarklari(DateTime baslangicTarihi, DateTime bitisTarihi, string cariKod, string sektorKodu)
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("SELECT     cari.cari_kod AS [Cari Kodu], cari.cari_unvan1 AS [Cari Ünvanı], cari.cari_unvan2 AS [Cari 2.Ünvanı],SUM(har.cha_meblag) AS [Toplam Alış Tutarı], SUM(fark.cha_fiyat_farki) AS [Kesilecek Fiyat Farkı Tutarı],fark.cha_RECno as id \r\n");
            sb.Append(" FROM         FIYAT_FARKI_KESILEN_EVRAKLAR as fark INNER JOIN CARI_HESAP_HAREKETLERI as har ON fark.cha_RECno = har.cha_RECno INNER JOIN CARI_HESAPLAR as cari ON fark.cari_RECno = cari.cari_RECno \r\n");
            sb.Append(" WHERE     (fark.cha_kesildi = 0) AND (har.cha_belge_tarih >= @bastarih AND har.cha_belge_tarih <= @bittarih) AND (cari.cari_kod = @cari or cari.cari_sektor_kodu=@sektor)  GROUP BY cari.cari_kod, cari.cari_unvan1, cari.cari_unvan2,fark.cha_RECno \r\n");
            SqlParameter prm1 = new SqlParameter("@bastarih", SqlDbType.DateTime);
            SqlParameter prm2 = new SqlParameter("@bittarih", SqlDbType.DateTime);
            SqlParameter prm3 = new SqlParameter("@cari", SqlDbType.VarChar, 25);
            SqlParameter prm4 = new SqlParameter("@sektor", SqlDbType.VarChar, 25);
            prm1.Value = new DateTime(baslangicTarihi.Year, baslangicTarihi.Month, baslangicTarihi.Day, 0, 0, 0);
            prm2.Value = new DateTime(bitisTarihi.Year, bitisTarihi.Month, bitisTarihi.Day, 23, 59, 59);
            prm3.Value = cariKod;
            prm4.Value = sektorKodu;
            return Factory.GetFactory.ExecuteDataTable(System.Data.CommandType.Text, sb.ToString(), prm1, prm2, prm3, prm4);
        }

        public DataTable KesilecekFiyatFarklari()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("SELECT     cari.cari_kod AS [Cari Kodu], cari.cari_unvan1 AS [Cari Ünvanı], cari.cari_unvan2 AS [Cari 2.Ünvanı],SUM(har.cha_meblag) AS [Toplam Alış Tutarı], SUM(fark.cha_fiyat_farki) AS [Kesilecek Fiyat Farkı Tutarı],fark.cha_RECno as id ,har.cha_belge_tarih as [Belge Tarihi],cast(0 as bit) as [Kesilsin],cari.cari_EMail,har.cha_belge_no AS [Belge No],har.cha_evrakno_seri AS [Fatura Seri], har.cha_evrakno_sira AS [Fatura Sıra],har.cha_meblag AS [Fatura Tutarı],fark.cha_fiyat_farki AS [Fiyat Farkı Tutarı] \r\n");
            sb.Append(" FROM         FIYAT_FARKI_KESILEN_EVRAKLAR as fark INNER JOIN CARI_HESAP_HAREKETLERI as har ON fark.cha_RECno = har.cha_RECno INNER JOIN CARI_HESAPLAR as cari ON fark.cari_RECno = cari.cari_RECno \r\n");
            sb.Append(" WHERE     (fark.cha_kesildi = 0)  GROUP BY cari.cari_kod, cari.cari_unvan1, cari.cari_unvan2,fark.cha_RECno,har.cha_belge_tarih,cari.cari_EMail,har.cha_belge_no,har.cha_evrakno_seri, har.cha_evrakno_sira,har.cha_meblag,fark.cha_fiyat_farki \r\n");
            return Factory.GetFactory.ExecuteDataTable(sb.ToString());
        }

        public DataTable CariListe(string filtre)
        {
            SqlParameter prm = new SqlParameter("@kod", SqlDbType.VarChar, 25);
            prm.Value = filtre;
            return Factory.GetFactory.ExecuteDataTable(CommandType.Text, "SELECT     cari_kod AS [Cari Kodu], cari_unvan1 AS [Cari Ünvanı], cari_unvan2 AS [Cari 2.Ünvanı] FROM         CARI_HESAPLAR AS cari  WHERE     (cari_kod like @kod) OR (cari_unvan1 like @kod)", prm);
        }

        public DataTable ChartReport1()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("SELECT     CARI_HESAPLAR.cari_kod AS [Cari Kodu], CARI_HESAPLAR.cari_unvan1 AS [Cari Ünvanı], SUM(FIYAT_FARKI_KESILEN_EVRAKLAR.cha_fiyat_farki) AS Tutar \r\n");
            sb.Append(" FROM         FIYAT_FARKI_KESILEN_EVRAKLAR INNER JOIN CARI_HESAPLAR ON FIYAT_FARKI_KESILEN_EVRAKLAR.cari_RECno = CARI_HESAPLAR.cari_RECno \r\n");
            sb.Append(" WHERE     (FIYAT_FARKI_KESILEN_EVRAKLAR.cha_kesildi = 1) GROUP BY CARI_HESAPLAR.cari_kod, CARI_HESAPLAR.cari_unvan1 \r\n");
            return Factory.GetFactory.ExecuteDataTable(sb.ToString());
        }

        public DataTable ChartReport2()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("SELECT     CARI_HESAPLAR.cari_kod AS [Cari Kodu], CARI_HESAPLAR.cari_unvan1 AS [Cari Ünvanı], SUM(FIYAT_FARKI_KESILEN_EVRAKLAR.cha_fiyat_farki) AS Tutar, dbo.fn_AyIsimBul(DATEPART(mm, FIYAT_FARKI_KESILEN_EVRAKLAR.cha_tarih)) AS Ay \r\n");
            sb.Append(" FROM         FIYAT_FARKI_KESILEN_EVRAKLAR INNER JOIN CARI_HESAPLAR ON FIYAT_FARKI_KESILEN_EVRAKLAR.cari_RECno = CARI_HESAPLAR.cari_RECno \r\n");
            sb.Append(" WHERE     (FIYAT_FARKI_KESILEN_EVRAKLAR.cha_kesildi = 1) GROUP BY CARI_HESAPLAR.cari_kod, CARI_HESAPLAR.cari_unvan1, FIYAT_FARKI_KESILEN_EVRAKLAR.cha_tarih \r\n");
            return Factory.GetFactory.ExecuteDataTable(sb.ToString());
        }

        public DataTable Operasyon1()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append(" SELECT    cast(0 as bit) as [Kesilsin],CARI_HESAP_HAREKETLERI.cha_belge_tarih AS [Belge Tarihi], CARI_HESAP_HAREKETLERI.cha_belge_no AS [Belge No],  \r\n");
            sb.Append("                      CARI_HESAP_HAREKETLERI.cha_evrakno_seri AS [Fatura Seri], CARI_HESAP_HAREKETLERI.cha_evrakno_sira AS [Fatura Sıra],  \r\n");
            sb.Append("                      CARI_HESAPLAR.cari_kod AS [Cari Kodu], CARI_HESAPLAR.cari_unvan1 AS [Cari Ünvanı], CARI_HESAP_HAREKETLERI.cha_meblag AS [Fatura Tutarı],  \r\n");
            sb.Append("                      FIYAT_FARKI_KESILEN_EVRAKLAR.cha_fiyat_farki AS [Fiyat Farkı Tutarı],CARI_PERSONEL_TANIMLARI.cari_per_adi AS [Temsilci Adı],CARI_PERSONEL_TANIMLARI.cari_per_soyadi AS [Temsilci Soyadı], CARI_PERSONEL_TANIMLARI.cari_per_mail AS [Temsilci Mail Adresi],FIYAT_FARKI_KESILEN_EVRAKLAR.cha_RECno as id,CARI_HESAPLAR.cari_EMail \r\n");
            sb.Append(" FROM       FIYAT_FARKI_KESILEN_EVRAKLAR INNER JOIN CARI_HESAP_HAREKETLERI ON FIYAT_FARKI_KESILEN_EVRAKLAR.cha_RECno = CARI_HESAP_HAREKETLERI.cha_RECno INNER JOIN \r\n");
            sb.Append("            CARI_HESAPLAR ON CARI_HESAP_HAREKETLERI.cha_kod = CARI_HESAPLAR.cari_kod LEFT OUTER JOIN CARI_PERSONEL_TANIMLARI ON CARI_HESAPLAR.cari_temsilci_kodu = CARI_PERSONEL_TANIMLARI.cari_per_kod \r\n");
            sb.Append(" WHERE     (FIYAT_FARKI_KESILEN_EVRAKLAR.cha_kesildi = 0) \r\n");
            sb.Append(" ORDER BY CARI_HESAPLAR.cari_kod,CARI_HESAP_HAREKETLERI.cha_evrakno_seri,CARI_HESAP_HAREKETLERI.cha_belge_tarih ");
            return Factory.GetFactory.ExecuteDataTable(sb.ToString());
        }

        public DataTable KontrolRaporu(DateTime baslangic, DateTime bitis)
        {
            string tarih1 = string.Format("{0}-{1}-{2} 00:00:00", baslangic.Year, baslangic.Month, baslangic.Day);
            string tarih2 = string.Format("{0}-{1}-{2} 00:00:00", bitis.Year, bitis.Month, bitis.Day);

            StringBuilder sb = new StringBuilder();
            sb.Append(" SELECT frk.cha_tarih AS [Evrak Tarihi], crh.cha_evrakno_seri AS [Evrak Seri],crh.cha_evrakno_sira AS [Evrak Sıra],crh.cha_belge_no AS [Belge No],cr2.cari_kod AS [Program Cari Kodu], cr2.cari_unvan1 AS [Program Cari Ünvanı],frk.cha_meblag AS [Program Fatura Tutarı], frk.cha_fiyat_farki AS [Program Fiyat Farkı],crh.cha_belge_tarih AS [Mikro Belge Tarihi], cr1.cari_kod AS [Mikro Cari Kodu],cr1.cari_unvan1 AS [Mikro Cari Unvani], crh.cha_meblag AS [Mikro Fatura Tutarı],(isnull(frk.cha_meblag,0) - isnull(crh.cha_meblag,0)) as [Fatura Fark Tutarı] ");
            sb.Append(" FROM   CARI_HESAPLAR AS cr1 INNER JOIN CARI_HESAP_HAREKETLERI as crh ON cr1.cari_kod = crh.cha_kod RIGHT OUTER JOIN FIYAT_FARKI_KESILEN_EVRAKLAR as frk INNER JOIN CARI_HESAPLAR as cr2 ON frk.cari_RECno = cr2.cari_RECno ON crh.cha_RECno = frk.cha_RECno ");
            sb.AppendFormat(" WHERE   ((frk.cha_tarih >='{0}' and frk.cha_tarih <='{1}') or frk.cha_tarih is null)", tarih1, tarih2);

            //sb.AppendFormat(" WHERE     (frk.cha_kesildi = 1) and ((frk.cha_tarih >='{0}' and frk.cha_tarih <='{1}') or frk.cha_tarih is null)", tarih1, tarih2);
            DataTable dt = Factory.GetFactory.ExecuteDataTable(sb.ToString());
            dt.Columns.Add("Durum", typeof(string));
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                if (dt.Rows[i]["Evrak Seri"] == DBNull.Value)
                {
                    dt.Rows[i]["Durum"] = "Evrak Bulunamadı";
                }
                else
                {
                    if (dt.Rows[i]["Evrak Tarihi"].ToString() != dt.Rows[i]["Mikro Belge Tarihi"].ToString())
                        dt.Rows[i]["Durum"] = "Tarih Farklı";
                    else if (dt.Rows[i]["Program Cari Kodu"].ToString() != dt.Rows[i]["Mikro Cari Kodu"].ToString())
                        dt.Rows[i]["Durum"] = "Cariler Farklı";
                    else if (dt.Rows[i]["Program Fiyat Farkı"].ToString() != dt.Rows[i]["Mikro Fatura Tutarı"].ToString())
                        dt.Rows[i]["Durum"] = "Tutar Farklı";
                }
            }
            return dt;
        }

        private int CharEkle(SqlTransaction trn, string evrakSeri, int evrakSira, DateTime evrakTarihi, decimal meblag, decimal[] vergiler, string saticiKodu, string cariKodu, decimal araToplam, string belgeNo, int vade, string aciklama)
        {
            string sqlStr = "insert into CARI_HESAP_HAREKETLERI (cha_RECid_DBCno,cha_RECid_RECno,cha_SpecRecNo,cha_iptal,cha_fileid,cha_hidden,cha_kilitli,cha_degisti,cha_CheckSum,cha_create_user,cha_create_date,cha_lastup_user,cha_lastup_date,cha_special1,cha_special2,cha_special3,cha_firmano,cha_subeno,cha_tarihi,cha_tip,cha_cinsi,cha_normal_Iade,cha_evrak_tip,cha_satir_no,cha_evrakno_seri,cha_evrakno_sira,cha_belge_no,cha_belge_tarih,cha_cari_cins,cha_kod,cha_kasa_hizmet,cha_kasa_hizkod,cha_d_kurtar,cha_d_cins,cha_d_kur,cha_altd_kur,cha_grupno,cha_meblag,cha_vade,cha_fis_tarih,cha_fis_sirano,cha_ft_iskonto1,cha_ft_iskonto2,cha_ft_iskonto3,cha_ft_iskonto4,cha_ft_iskonto5,cha_ft_iskonto6,cha_ft_masraf1,cha_ft_masraf2,cha_ft_masraf3,cha_ft_masraf4,cha_vergi1,cha_vergi2,cha_vergi3,cha_vergi4,cha_vergi5,cha_vergi6,cha_vergi7,cha_vergi8,cha_vergi9,cha_vergi10,cha_yuvarlama,cha_tpoz,cha_aciklama,cha_trefno,cha_sntck_poz,cha_karsidcinsi,cha_karsid_kur,cha_karsidgrupno,cha_srmrkkodu,cha_reftarihi,cha_odeme_arr1,cha_odeme_arr2,cha_odeme_arr3,cha_odeme_arr4,cha_odeme_arr5,cha_odeme_arr6,cha_odeme_arr7,cha_odeme_arr8,cha_miktari,cha_aratoplam,cha_vergipntr,cha_istisnakodu,cha_ver_tev_carpani,cha_stopaj,cha_savsandesfonu,cha_vergisiz_fl,cha_satici_kodu,cha_mustahsil_borsa,cha_mustahsil_bagkur,cha_mustahsil_diger,cha_HalMSDF,cha_HalHamaliye,cha_HalStopaj,cha_HalKomisyonu,cha_StFonPntr,cha_pos_hareketi,cha_vardiya_tarihi,cha_vardiya_no,cha_vardiya_evrak_ti,cha_HalRusum,cha_HalNavlunTut,cha_HalRehinFuture,cha_HalKomisyon,cha_Vade_Farki_Yuz,cha_karsisrmrkkodu,cha_EXIMkodu,cha_HalRehinSandikmiktari,cha_HalSandikVrMiktar,cha_HalSandikTutari,cha_HalSandikKDVTutari,cha_HalrehinSandikTutari,cha_Tevkifat_turu,cha_ticaret_turu,cha_otvtutari,cha_otvvergisiz_fl,cha_projekodu,cha_sozlesme_DBCno,cha_sozlesme_RECno,cha_yat_tes_kodu,cha_ciro_cari_kodu,cha_oivergisiz_fl,cha_meblag_ana_doviz_icin_gecersiz_fl,cha_meblag_alt_doviz_icin_gecersiz_fl,cha_meblag_orj_doviz_icin_gecersiz_fl,cha_ciroprim_DBCno,cha_ciroprim_RECno,cha_HalHamaliyeKdv,cha_HalHamaliyeVergisiz_fl) values (@cha_RECid_DBCno,@cha_RECid_RECno,@cha_SpecRecNo,@cha_iptal,@cha_fileid,@cha_hidden,@cha_kilitli,@cha_degisti,@cha_CheckSum,@cha_create_user,@cha_create_date,@cha_lastup_user,@cha_lastup_date,@cha_special1,@cha_special2,@cha_special3,@cha_firmano,@cha_subeno,@cha_tarihi,@cha_tip,@cha_cinsi,@cha_normal_Iade,@cha_evrak_tip,@cha_satir_no,@cha_evrakno_seri,@cha_evrakno_sira,@cha_belge_no,@cha_belge_tarih,@cha_cari_cins,@cha_kod,@cha_kasa_hizmet,@cha_kasa_hizkod,@cha_d_kurtar,@cha_d_cins,@cha_d_kur,@cha_altd_kur,@cha_grupno,@cha_meblag,@cha_vade,@cha_fis_tarih,@cha_fis_sirano,@cha_ft_iskonto1,@cha_ft_iskonto2,@cha_ft_iskonto3,@cha_ft_iskonto4,@cha_ft_iskonto5,@cha_ft_iskonto6,@cha_ft_masraf1,@cha_ft_masraf2,@cha_ft_masraf3,@cha_ft_masraf4,@cha_vergi1,@cha_vergi2,@cha_vergi3,@cha_vergi4,@cha_vergi5,@cha_vergi6,@cha_vergi7,@cha_vergi8,@cha_vergi9,@cha_vergi10,@cha_yuvarlama,@cha_tpoz,@cha_aciklama,@cha_trefno,@cha_sntck_poz,@cha_karsidcinsi,@cha_karsid_kur,@cha_karsidgrupno,@cha_srmrkkodu,@cha_reftarihi,@cha_odeme_arr1,@cha_odeme_arr2,@cha_odeme_arr3,@cha_odeme_arr4,@cha_odeme_arr5,@cha_odeme_arr6,@cha_odeme_arr7,@cha_odeme_arr8,@cha_miktari,@cha_aratoplam,@cha_vergipntr,@cha_istisnakodu,@cha_ver_tev_carpani,@cha_stopaj,@cha_savsandesfonu,@cha_vergisiz_fl,@cha_satici_kodu,@cha_mustahsil_borsa,@cha_mustahsil_bagkur,@cha_mustahsil_diger,@cha_HalMSDF,@cha_HalHamaliye,@cha_HalStopaj,@cha_HalKomisyonu,@cha_StFonPntr,@cha_pos_hareketi,@cha_vardiya_tarihi,@cha_vardiya_no,@cha_vardiya_evrak_ti,@cha_HalRusum,@cha_HalNavlunTut,@cha_HalRehinFuture,@cha_HalKomisyon,@cha_Vade_Farki_Yuz,@cha_karsisrmrkkodu,@cha_EXIMkodu,@cha_HalRehinSandikmiktari,@cha_HalSandikVrMiktar,@cha_HalSandikTutari,@cha_HalSandikKDVTutari,@cha_HalrehinSandikTutari,@cha_Tevkifat_turu,@cha_ticaret_turu,@cha_otvtutari,@cha_otvvergisiz_fl,@cha_projekodu,@cha_sozlesme_DBCno,@cha_sozlesme_RECno,@cha_yat_tes_kodu,@cha_ciro_cari_kodu,@cha_oivergisiz_fl,@cha_meblag_ana_doviz_icin_gecersiz_fl,@cha_meblag_alt_doviz_icin_gecersiz_fl,@cha_meblag_orj_doviz_icin_gecersiz_fl,@cha_ciroprim_DBCno,@cha_ciroprim_RECno,@cha_HalHamaliyeKdv,@cha_HalHamaliyeVergisiz_fl);SELECT @@IDENTITY";
            List<SqlParameter> prmList = new List<SqlParameter>();
            prmList.Add(new SqlParameter() { ParameterName = "@cha_RECid_DBCno", SqlDbType = SqlDbType.SmallInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_RECid_RECno", SqlDbType = SqlDbType.Int, Value = -1 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_SpecRecNo", SqlDbType = SqlDbType.Int, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_iptal", SqlDbType = SqlDbType.Bit, Value = false });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_fileid", SqlDbType = SqlDbType.SmallInt, Value = 51 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_hidden", SqlDbType = SqlDbType.Bit, Value = false });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_kilitli", SqlDbType = SqlDbType.Bit, Value = false });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_degisti", SqlDbType = SqlDbType.Bit, Value = false });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_CheckSum", SqlDbType = SqlDbType.Int, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_create_user", SqlDbType = SqlDbType.SmallInt, Value = 1 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_create_date", SqlDbType = SqlDbType.DateTime, Value = evrakTarihi });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_lastup_user", SqlDbType = SqlDbType.SmallInt, Value = 1 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_lastup_date", SqlDbType = SqlDbType.DateTime, Value = evrakTarihi });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_special1", SqlDbType = SqlDbType.NVarChar, Value = "" });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_special2", SqlDbType = SqlDbType.NVarChar, Value = "" });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_special3", SqlDbType = SqlDbType.NVarChar, Value = "" });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_firmano", SqlDbType = SqlDbType.Int, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_subeno", SqlDbType = SqlDbType.Int, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_tarihi", SqlDbType = SqlDbType.DateTime, Value = evrakTarihi });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_tip", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_cinsi", SqlDbType = SqlDbType.TinyInt, Value = 15 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_normal_Iade", SqlDbType = SqlDbType.TinyInt, Value = 1 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_evrak_tip", SqlDbType = SqlDbType.TinyInt, Value = 63 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_satir_no", SqlDbType = SqlDbType.Int, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_evrakno_seri", SqlDbType = SqlDbType.NVarChar, Value = evrakSeri });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_evrakno_sira", SqlDbType = SqlDbType.Int, Value = evrakSira });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_belge_no", SqlDbType = SqlDbType.NVarChar, Value = belgeNo });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_belge_tarih", SqlDbType = SqlDbType.DateTime, Value = evrakTarihi });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_cari_cins", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_kod", SqlDbType = SqlDbType.NVarChar, Value = cariKodu });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_kasa_hizmet", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_kasa_hizkod", SqlDbType = SqlDbType.NVarChar, Value = "" });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_d_kurtar", SqlDbType = SqlDbType.DateTime, Value = "1899-12-30 00:00:00" });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_d_cins", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_d_kur", SqlDbType = SqlDbType.Float, Value = 1 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_altd_kur", SqlDbType = SqlDbType.Float, Value = 1 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_grupno", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_meblag", SqlDbType = SqlDbType.Float, Value = meblag });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_vade", SqlDbType = SqlDbType.Int, Value = vade });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_fis_tarih", SqlDbType = SqlDbType.DateTime, Value = "1899-12-30 00:00:00" });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_fis_sirano", SqlDbType = SqlDbType.Int, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_ft_iskonto1", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_ft_iskonto2", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_ft_iskonto3", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_ft_iskonto4", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_ft_iskonto5", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_ft_iskonto6", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_ft_masraf1", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_ft_masraf2", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_ft_masraf3", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_ft_masraf4", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_vergi1", SqlDbType = SqlDbType.Float, Value = vergiler[0] });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_vergi2", SqlDbType = SqlDbType.Float, Value = vergiler[1] });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_vergi3", SqlDbType = SqlDbType.Float, Value = vergiler[2] });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_vergi4", SqlDbType = SqlDbType.Float, Value = vergiler[3] });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_vergi5", SqlDbType = SqlDbType.Float, Value = vergiler[4] });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_vergi6", SqlDbType = SqlDbType.Float, Value = vergiler[5] });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_vergi7", SqlDbType = SqlDbType.Float, Value = vergiler[6] });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_vergi8", SqlDbType = SqlDbType.Float, Value = vergiler[7] });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_vergi9", SqlDbType = SqlDbType.Float, Value = vergiler[8] });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_vergi10", SqlDbType = SqlDbType.Float, Value = vergiler[9] });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_yuvarlama", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_tpoz", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_aciklama", SqlDbType = SqlDbType.NVarChar, Value = aciklama });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_trefno", SqlDbType = SqlDbType.NVarChar, Value = "" });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_sntck_poz", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_karsidcinsi", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_karsid_kur", SqlDbType = SqlDbType.Float, Value = 1 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_karsidgrupno", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_srmrkkodu", SqlDbType = SqlDbType.NVarChar, Value = "" });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_reftarihi", SqlDbType = SqlDbType.DateTime, Value = "1899-12-30 00:00:00" });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_odeme_arr1", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_odeme_arr2", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_odeme_arr3", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_odeme_arr4", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_odeme_arr5", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_odeme_arr6", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_odeme_arr7", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_odeme_arr8", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_miktari", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_aratoplam", SqlDbType = SqlDbType.Float, Value = araToplam });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_vergipntr", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_istisnakodu", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_ver_tev_carpani", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_stopaj", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_savsandesfonu", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_vergisiz_fl", SqlDbType = SqlDbType.Bit, Value = false });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_satici_kodu", SqlDbType = SqlDbType.NVarChar, Value = saticiKodu });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_mustahsil_borsa", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_mustahsil_bagkur", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_mustahsil_diger", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_HalMSDF", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_HalHamaliye", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_HalStopaj", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_HalKomisyonu", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_StFonPntr", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_pos_hareketi", SqlDbType = SqlDbType.Bit, Value = false });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_vardiya_tarihi", SqlDbType = SqlDbType.DateTime, Value = "1899-12-30 00:00:00" });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_vardiya_no", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_vardiya_evrak_ti", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_HalRusum", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_HalNavlunTut", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_HalRehinFuture", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_HalKomisyon", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_Vade_Farki_Yuz", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_karsisrmrkkodu", SqlDbType = SqlDbType.NVarChar, Value = "" });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_EXIMkodu", SqlDbType = SqlDbType.NVarChar, Value = "" });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_HalRehinSandikmiktari", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_HalSandikVrMiktar", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_HalSandikTutari", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_HalSandikKDVTutari", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_HalrehinSandikTutari", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_Tevkifat_turu", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_ticaret_turu", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_otvtutari", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_otvvergisiz_fl", SqlDbType = SqlDbType.Bit, Value = false });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_projekodu", SqlDbType = SqlDbType.NVarChar, Value = "" });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_sozlesme_DBCno", SqlDbType = SqlDbType.SmallInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_sozlesme_RECno", SqlDbType = SqlDbType.Int, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_yat_tes_kodu", SqlDbType = SqlDbType.NVarChar, Value = "" });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_ciro_cari_kodu", SqlDbType = SqlDbType.NVarChar, Value = cariKodu });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_oivergisiz_fl", SqlDbType = SqlDbType.Bit, Value = false });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_meblag_ana_doviz_icin_gecersiz_fl", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_meblag_alt_doviz_icin_gecersiz_fl", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_meblag_orj_doviz_icin_gecersiz_fl", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_ciroprim_DBCno", SqlDbType = SqlDbType.SmallInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_ciroprim_RECno", SqlDbType = SqlDbType.Int, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_HalHamaliyeKdv", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_HalHamaliyeVergisiz_fl", SqlDbType = SqlDbType.Bit, Value = false });
            object recid = Factory.GetFactory.ExecuteScaler(CommandType.Text, sqlStr, trn, prmList.ToArray());
            if (recid != null)
            {
                Factory.GetFactory.ExecuteNonQuery(CommandType.Text, string.Format("UPDATE CARI_HESAP_HAREKETLERI SET cha_RECid_RECno=cha_RECno WHERE cha_RECno={0}", recid.ToString()), trn);
                return Convert.ToInt32(recid);
            }
            return -1;
        }

        private void SharEkle(SqlTransaction trn, string evrakSeri, int evrakSira, DateTime evrakTarihi, int evrakSatir, string stokKodu, string cariKod, string plasiyerKod, decimal miktar, decimal tutar, int kdvSira, decimal kdvOran, int charRecNo, int depoNo)
        {
            string sqlStr = " insert into STOK_HAREKETLERI (sth_RECid_DBCno,sth_RECid_RECno,sth_SpecRECno,sth_iptal,sth_fileid,sth_hidden,sth_kilitli,sth_degisti,sth_checksum,sth_create_user,sth_create_date,sth_lastup_user,sth_lastup_date,sth_special1,sth_special2,sth_special3,sth_firmano,sth_subeno,sth_tarih,sth_tip,sth_cins,sth_normal_iade,sth_evraktip,sth_evrakno_seri,sth_evrakno_sira,sth_satirno,sth_belge_no,sth_belge_tarih,sth_stok_kod,sth_isk_mas1,sth_isk_mas2,sth_isk_mas3,sth_isk_mas4,sth_isk_mas5,sth_isk_mas6,sth_isk_mas7,sth_isk_mas8,sth_isk_mas9,sth_isk_mas10,sth_sat_iskmas1,sth_sat_iskmas2,sth_sat_iskmas3,sth_sat_iskmas4,sth_sat_iskmas5,sth_sat_iskmas6,sth_sat_iskmas7,sth_sat_iskmas8,sth_sat_iskmas9,sth_sat_iskmas10,sth_pos_satis,sth_cari_cinsi,sth_cari_kodu,sth_cari_grup_no,sth_isemri_gider_kodu,sth_ismerkezi_kodu,sth_plasiyer_kodu,sth_kur_tarihi,sth_har_doviz_cinsi,sth_har_doviz_kuru,sth_alt_doviz_kuru,sth_stok_doviz_cinsi,sth_stok_doviz_kuru,sth_miktar,sth_miktar2,sth_birim_pntr,sth_tutar,sth_iskonto1,sth_iskonto2,sth_iskonto3,sth_iskonto4,sth_iskonto5,sth_iskonto6,sth_masraf1,sth_masraf2,sth_masraf3,sth_masraf4,sth_vergi_pntr,sth_vergi,sth_masraf_vergi_pntr,sth_masraf_vergi,sth_netagirlik,sth_odeme_op,sth_aciklama,sth_sip_recid_dbcno,sth_sip_recid_recno,sth_fat_recid_dbcno,sth_fat_recid_recno,sth_giris_depo_no,sth_cikis_depo_no,sth_malkbl_sevk_tarihi,sth_cari_srm_merkezi,sth_stok_srm_merkezi,sth_fis_tarihi,sth_fis_sirano,sth_vergisiz_fl,sth_maliyet_ana,sth_maliyet_alternatif,sth_maliyet_orjinal,sth_adres_no,sth_parti_kodu,sth_lot_no,sth_kons_recid_dbcno,sth_kons_recid_recno,sth_subesip_recid_dbcno,sth_subesip_recid_recno,sth_vardiya_tarihi,sth_vardiya_no,sth_satistipi,sth_proje_kodu,sth_ihracat_kredi_kodu,sth_exim_kodu,sth_otv_pntr,sth_otv_vergi,sth_bkm_recid_dbcno,sth_bkm_recid_recno,sth_karsikons_recid_dbcno,sth_karsikons_recid_recno,sth_iade_evrak_seri,sth_iade_evrak_sira,sth_diib_belge_no,sth_diib_satir_no,sth_mensey_ulke_tipi,sth_mensey_ulke_kodu,sth_brutagirlik,sth_halrehmiktari,sth_halrehfiyati,sth_halsandikmiktari,sth_halsandikfiyati,sth_halsandikkdvtutari,sth_disticaret_turu,sth_otvtutari,sth_otvvergisiz_fl,sth_direkt_iscilik_1,sth_direkt_iscilik_2,sth_direkt_iscilik_3,sth_direkt_iscilik_4,sth_direkt_iscilik_5,sth_genel_uretim_1,sth_genel_uretim_2,sth_genel_uretim_3,sth_genel_uretim_4,sth_genel_uretim_5,sth_yat_tes_kodu,sth_oiv_pntr,sth_oiv_vergi,sth_oivvergisiz_fl,sth_fiyat_liste_no,sth_fis_tarihi2,sth_fis_sirano2,sth_rez_recid_dbcno,sth_rez_recid_recno) values (@sth_RECid_DBCno,@sth_RECid_RECno,@sth_SpecRECno,@sth_iptal,@sth_fileid,@sth_hidden,@sth_kilitli,@sth_degisti,@sth_checksum,@sth_create_user,@sth_create_date,@sth_lastup_user,@sth_lastup_date,@sth_special1,@sth_special2,@sth_special3,@sth_firmano,@sth_subeno,@sth_tarih,@sth_tip,@sth_cins,@sth_normal_iade,@sth_evraktip,@sth_evrakno_seri,@sth_evrakno_sira,@sth_satirno,@sth_belge_no,@sth_belge_tarih,@sth_stok_kod,@sth_isk_mas1,@sth_isk_mas2,@sth_isk_mas3,@sth_isk_mas4,@sth_isk_mas5,@sth_isk_mas6,@sth_isk_mas7,@sth_isk_mas8,@sth_isk_mas9,@sth_isk_mas10,@sth_sat_iskmas1,@sth_sat_iskmas2,@sth_sat_iskmas3,@sth_sat_iskmas4,@sth_sat_iskmas5,@sth_sat_iskmas6,@sth_sat_iskmas7,@sth_sat_iskmas8,@sth_sat_iskmas9,@sth_sat_iskmas10,@sth_pos_satis,@sth_cari_cinsi,@sth_cari_kodu,@sth_cari_grup_no,@sth_isemri_gider_kodu,@sth_ismerkezi_kodu,@sth_plasiyer_kodu,@sth_kur_tarihi,@sth_har_doviz_cinsi,@sth_har_doviz_kuru,@sth_alt_doviz_kuru,@sth_stok_doviz_cinsi,@sth_stok_doviz_kuru,@sth_miktar,@sth_miktar2,@sth_birim_pntr,@sth_tutar,@sth_iskonto1,@sth_iskonto2,@sth_iskonto3,@sth_iskonto4,@sth_iskonto5,@sth_iskonto6,@sth_masraf1,@sth_masraf2,@sth_masraf3,@sth_masraf4,@sth_vergi_pntr,@sth_vergi,@sth_masraf_vergi_pntr,@sth_masraf_vergi,@sth_netagirlik,@sth_odeme_op,@sth_aciklama,@sth_sip_recid_dbcno,@sth_sip_recid_recno,@sth_fat_recid_dbcno,@sth_fat_recid_recno,@sth_giris_depo_no,@sth_cikis_depo_no,@sth_malkbl_sevk_tarihi,@sth_cari_srm_merkezi,@sth_stok_srm_merkezi,@sth_fis_tarihi,@sth_fis_sirano,@sth_vergisiz_fl,@sth_maliyet_ana,@sth_maliyet_alternatif,@sth_maliyet_orjinal,@sth_adres_no,@sth_parti_kodu,@sth_lot_no,@sth_kons_recid_dbcno,@sth_kons_recid_recno,@sth_subesip_recid_dbcno,@sth_subesip_recid_recno,@sth_vardiya_tarihi,@sth_vardiya_no,@sth_satistipi,@sth_proje_kodu,@sth_ihracat_kredi_kodu,@sth_exim_kodu,@sth_otv_pntr,@sth_otv_vergi,@sth_bkm_recid_dbcno,@sth_bkm_recid_recno,@sth_karsikons_recid_dbcno,@sth_karsikons_recid_recno,@sth_iade_evrak_seri,@sth_iade_evrak_sira,@sth_diib_belge_no,@sth_diib_satir_no,@sth_mensey_ulke_tipi,@sth_mensey_ulke_kodu,@sth_brutagirlik,@sth_halrehmiktari,@sth_halrehfiyati,@sth_halsandikmiktari,@sth_halsandikfiyati,@sth_halsandikkdvtutari,@sth_disticaret_turu,@sth_otvtutari,@sth_otvvergisiz_fl,@sth_direkt_iscilik_1,@sth_direkt_iscilik_2,@sth_direkt_iscilik_3,@sth_direkt_iscilik_4,@sth_direkt_iscilik_5,@sth_genel_uretim_1,@sth_genel_uretim_2,@sth_genel_uretim_3,@sth_genel_uretim_4,@sth_genel_uretim_5,@sth_yat_tes_kodu,@sth_oiv_pntr,@sth_oiv_vergi,@sth_oivvergisiz_fl,@sth_fiyat_liste_no,@sth_fis_tarihi2,@sth_fis_sirano2,@sth_rez_recid_dbcno,@sth_rez_recid_recno);UPDATE STOK_HAREKETLERI SET sth_RECid_RECno=sth_RECno WHERE sth_RECno=@@IDENTITY ";
            List<SqlParameter> prmList = new List<SqlParameter>();
            prmList.Add(new SqlParameter() { ParameterName = "@sth_RECid_DBCno", SqlDbType = SqlDbType.SmallInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_RECid_RECno", SqlDbType = SqlDbType.Int, Value = -1 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_SpecRECno", SqlDbType = SqlDbType.Int, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_iptal", SqlDbType = SqlDbType.Bit, Value = false });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_fileid", SqlDbType = SqlDbType.SmallInt, Value = 16 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_hidden", SqlDbType = SqlDbType.Bit, Value = false });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_kilitli", SqlDbType = SqlDbType.Bit, Value = false });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_degisti", SqlDbType = SqlDbType.Bit, Value = false });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_checksum", SqlDbType = SqlDbType.Int, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_create_user", SqlDbType = SqlDbType.SmallInt, Value = 1 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_create_date", SqlDbType = SqlDbType.DateTime, Value = DateTime.Now });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_lastup_user", SqlDbType = SqlDbType.SmallInt, Value = 1 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_lastup_date", SqlDbType = SqlDbType.DateTime, Value = DateTime.Now });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_special1", SqlDbType = SqlDbType.NVarChar, Value = "" });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_special2", SqlDbType = SqlDbType.NVarChar, Value = "" });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_special3", SqlDbType = SqlDbType.NVarChar, Value = "" });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_firmano", SqlDbType = SqlDbType.Int, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_subeno", SqlDbType = SqlDbType.Int, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_tarih", SqlDbType = SqlDbType.DateTime, Value = evrakTarihi });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_tip", SqlDbType = SqlDbType.TinyInt, Value = 1 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_cins", SqlDbType = SqlDbType.TinyInt, Value = 9 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_normal_iade", SqlDbType = SqlDbType.TinyInt, Value = 1 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_evraktip", SqlDbType = SqlDbType.TinyInt, Value = 4 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_evrakno_seri", SqlDbType = SqlDbType.NVarChar, Value = evrakSeri });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_evrakno_sira", SqlDbType = SqlDbType.Int, Value = evrakSira });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_satirno", SqlDbType = SqlDbType.Int, Value = evrakSatir });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_belge_no", SqlDbType = SqlDbType.NVarChar, Value = "" });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_belge_tarih", SqlDbType = SqlDbType.DateTime, Value = evrakTarihi });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_stok_kod", SqlDbType = SqlDbType.NVarChar, Value = stokKodu });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_isk_mas1", SqlDbType = SqlDbType.TinyInt, Value = 1 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_isk_mas2", SqlDbType = SqlDbType.TinyInt, Value = 1 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_isk_mas3", SqlDbType = SqlDbType.TinyInt, Value = 1 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_isk_mas4", SqlDbType = SqlDbType.TinyInt, Value = 1 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_isk_mas5", SqlDbType = SqlDbType.TinyInt, Value = 1 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_isk_mas6", SqlDbType = SqlDbType.TinyInt, Value = 1 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_isk_mas7", SqlDbType = SqlDbType.TinyInt, Value = 1 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_isk_mas8", SqlDbType = SqlDbType.TinyInt, Value = 1 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_isk_mas9", SqlDbType = SqlDbType.TinyInt, Value = 1 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_isk_mas10", SqlDbType = SqlDbType.TinyInt, Value = 1 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_sat_iskmas1", SqlDbType = SqlDbType.Bit, Value = false });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_sat_iskmas2", SqlDbType = SqlDbType.Bit, Value = false });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_sat_iskmas3", SqlDbType = SqlDbType.Bit, Value = false });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_sat_iskmas4", SqlDbType = SqlDbType.Bit, Value = false });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_sat_iskmas5", SqlDbType = SqlDbType.Bit, Value = false });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_sat_iskmas6", SqlDbType = SqlDbType.Bit, Value = false });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_sat_iskmas7", SqlDbType = SqlDbType.Bit, Value = false });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_sat_iskmas8", SqlDbType = SqlDbType.Bit, Value = false });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_sat_iskmas9", SqlDbType = SqlDbType.Bit, Value = false });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_sat_iskmas10", SqlDbType = SqlDbType.Bit, Value = false });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_pos_satis", SqlDbType = SqlDbType.Bit, Value = false });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_cari_cinsi", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_cari_kodu", SqlDbType = SqlDbType.NVarChar, Value = cariKod });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_cari_grup_no", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_isemri_gider_kodu", SqlDbType = SqlDbType.NVarChar, Value = "" });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_ismerkezi_kodu", SqlDbType = SqlDbType.NVarChar, Value = "" });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_plasiyer_kodu", SqlDbType = SqlDbType.NVarChar, Value = plasiyerKod });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_kur_tarihi", SqlDbType = SqlDbType.DateTime, Value = "1899-12-30 00:00:00" });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_har_doviz_cinsi", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_har_doviz_kuru", SqlDbType = SqlDbType.Float, Value = 1 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_alt_doviz_kuru", SqlDbType = SqlDbType.Float, Value = 1 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_stok_doviz_cinsi", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_stok_doviz_kuru", SqlDbType = SqlDbType.Float, Value = 1 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_miktar", SqlDbType = SqlDbType.Float, Value = miktar });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_miktar2", SqlDbType = SqlDbType.Float, Value = miktar });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_birim_pntr", SqlDbType = SqlDbType.TinyInt, Value = 1 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_tutar", SqlDbType = SqlDbType.Float, Value = tutar });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_iskonto1", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_iskonto2", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_iskonto3", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_iskonto4", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_iskonto5", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_iskonto6", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_masraf1", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_masraf2", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_masraf3", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_masraf4", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_vergi_pntr", SqlDbType = SqlDbType.TinyInt, Value = kdvSira });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_vergi", SqlDbType = SqlDbType.Float, Value = kdvOran });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_masraf_vergi_pntr", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_masraf_vergi", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_netagirlik", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_odeme_op", SqlDbType = SqlDbType.Int, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_aciklama", SqlDbType = SqlDbType.NVarChar, Value = "" });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_sip_recid_dbcno", SqlDbType = SqlDbType.SmallInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_sip_recid_recno", SqlDbType = SqlDbType.Int, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_fat_recid_dbcno", SqlDbType = SqlDbType.SmallInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_fat_recid_recno", SqlDbType = SqlDbType.Int, Value = charRecNo });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_giris_depo_no", SqlDbType = SqlDbType.Int, Value = depoNo });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_cikis_depo_no", SqlDbType = SqlDbType.Int, Value = depoNo });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_malkbl_sevk_tarihi", SqlDbType = SqlDbType.DateTime, Value = evrakTarihi });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_cari_srm_merkezi", SqlDbType = SqlDbType.NVarChar, Value = "" });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_stok_srm_merkezi", SqlDbType = SqlDbType.NVarChar, Value = "" });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_fis_tarihi", SqlDbType = SqlDbType.DateTime, Value = "1899-12-30 00:00:00" });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_fis_sirano", SqlDbType = SqlDbType.Int, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_vergisiz_fl", SqlDbType = SqlDbType.Bit, Value = false });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_maliyet_ana", SqlDbType = SqlDbType.Float, Value = tutar });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_maliyet_alternatif", SqlDbType = SqlDbType.Float, Value = tutar });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_maliyet_orjinal", SqlDbType = SqlDbType.Float, Value = tutar });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_adres_no", SqlDbType = SqlDbType.Int, Value = 1 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_parti_kodu", SqlDbType = SqlDbType.NVarChar, Value = "" });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_lot_no", SqlDbType = SqlDbType.Int, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_kons_recid_dbcno", SqlDbType = SqlDbType.SmallInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_kons_recid_recno", SqlDbType = SqlDbType.Int, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_subesip_recid_dbcno", SqlDbType = SqlDbType.SmallInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_subesip_recid_recno", SqlDbType = SqlDbType.Int, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_vardiya_tarihi", SqlDbType = SqlDbType.DateTime, Value = "1899-12-30 00:00:00" });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_vardiya_no", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_satistipi", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_proje_kodu", SqlDbType = SqlDbType.NVarChar, Value = "" });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_ihracat_kredi_kodu", SqlDbType = SqlDbType.NVarChar, Value = "" });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_exim_kodu", SqlDbType = SqlDbType.NVarChar, Value = "" });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_otv_pntr", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_otv_vergi", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_bkm_recid_dbcno", SqlDbType = SqlDbType.SmallInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_bkm_recid_recno", SqlDbType = SqlDbType.Int, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_karsikons_recid_dbcno", SqlDbType = SqlDbType.SmallInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_karsikons_recid_recno", SqlDbType = SqlDbType.Int, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_iade_evrak_seri", SqlDbType = SqlDbType.NVarChar, Value = "" });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_iade_evrak_sira", SqlDbType = SqlDbType.Int, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_diib_belge_no", SqlDbType = SqlDbType.NVarChar, Value = "" });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_diib_satir_no", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_mensey_ulke_tipi", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_mensey_ulke_kodu", SqlDbType = SqlDbType.NVarChar, Value = "" });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_brutagirlik", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_halrehmiktari", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_halrehfiyati", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_halsandikmiktari", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_halsandikfiyati", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_halsandikkdvtutari", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_disticaret_turu", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_otvtutari", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_otvvergisiz_fl", SqlDbType = SqlDbType.Bit, Value = false });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_direkt_iscilik_1", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_direkt_iscilik_2", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_direkt_iscilik_3", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_direkt_iscilik_4", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_direkt_iscilik_5", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_genel_uretim_1", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_genel_uretim_2", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_genel_uretim_3", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_genel_uretim_4", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_genel_uretim_5", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_yat_tes_kodu", SqlDbType = SqlDbType.NVarChar, Value = "" });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_oiv_pntr", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_oiv_vergi", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_oivvergisiz_fl", SqlDbType = SqlDbType.Bit, Value = false });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_fiyat_liste_no", SqlDbType = SqlDbType.Int, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_fis_tarihi2", SqlDbType = SqlDbType.DateTime, Value = "1899-12-30 00:00:00" });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_fis_sirano2", SqlDbType = SqlDbType.Int, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_rez_recid_dbcno", SqlDbType = SqlDbType.SmallInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@sth_rez_recid_recno", SqlDbType = SqlDbType.Int, Value = 0 });
            Factory.GetFactory.ExecuteNonQuery(CommandType.Text, sqlStr, trn, prmList.ToArray());
        }

        private string KdvStokKodu(int kdvoran)
        {
            switch (kdvoran)
            {
                case 1:
                    return Config.GetConfig.GetValue(Parametre.kdv1stokkod);
                case 8:
                    return Config.GetConfig.GetValue(Parametre.kdv8stokkod);
                case 18:
                    return Config.GetConfig.GetValue(Parametre.kdv18stokkod);
            }
            return "";
        }

        public void FaturaKes(string charID, string evrakSeri, int evrakSira, DateTime evrakTarihi, string belgeNo, string aciklama)
        {
            StringBuilder sb = new StringBuilder();
            if (Config.GetConfig.GetValue(Parametre.faturaDetayli, "Hayır") == "Evet")
            {
                sb.Append(" SELECT     st.sto_toptan_vergi, cr.cari_kod, SUM(fd.sth_miktar) AS sth_miktar, SUM(fd.fark_tutari) AS fark_tutari, dbo.fn_VergiYuzde(st.sto_toptan_vergi) AS vergi_orani,cr.cari_odemeplan_no AS vade, cr.cari_temsilci_kodu, fd.depo_no ");
                sb.Append(" FROM         FIYAT_FARKI_FATURA_DETAYLARI AS fd INNER JOIN FIYAT_FARKI_KESILEN_EVRAKLAR AS fe ON fd.cha_RECno = fe.cha_RECno INNER JOIN STOKLAR AS st ON fd.sto_RECno = st.sto_RECno INNER JOIN CARI_HESAPLAR AS cr ON fe.cari_RECno = cr.cari_RECno ");
                sb.Append(" WHERE     (fe.cha_RECno in ({0})) \r\n");
                sb.Append(" GROUP BY st.sto_toptan_vergi, cr.cari_kod, dbo.fn_VergiYuzde(st.sto_toptan_vergi), cr.cari_odemeplan_no, cr.cari_temsilci_kodu, fd.depo_no ");
            }
            else
            {
                sb.Append("SELECT     st.sto_kod, st.sto_toptan_vergi, cr.cari_kod, fd.sth_miktar,fd.fark_tutari, dbo.fn_VergiYuzde(st.sto_toptan_vergi) AS vergi_orani, cr.cari_odemeplan_no AS vade,cr.cari_temsilci_kodu, fd.depo_no \r\n");
                sb.Append(" FROM         FIYAT_FARKI_FATURA_DETAYLARI as fd INNER JOIN FIYAT_FARKI_KESILEN_EVRAKLAR as fe ON fd.cha_RECno = fe.cha_RECno INNER JOIN STOKLAR as st ON fd.sto_RECno = st.sto_RECno INNER JOIN CARI_HESAPLAR as cr ON fe.cari_RECno = cr.cari_RECno \r\n");
                sb.Append(" WHERE     (fe.cha_RECno in ({0})) \r\n");
            }

            DataTable dt = Factory.GetFactory.ExecuteDataTable(CommandType.Text, string.Format(sb.ToString(), charID));

            Dictionary<int, decimal> kdvTutarlari = new Dictionary<int, decimal>();
            for (int i = 1; i < 11; i++)
                kdvTutarlari.Add(i, 0);


            string stokkod = "";
            int vergiId = 0;
            int vergiOran = 0;
            string cariKod = "";
            decimal miktar = 0;
            decimal farktutari = 0;
            int vade = 0;
            string plasiyer = "";
            int depo = 0;
            decimal meblag = 0;
            decimal aratoplam = 0;

            SqlTransaction trn = Factory.GetFactory.OpenSession();

            for (int i = 0; i < dt.Rows.Count; i++)
            {
                vergiId = Convert.ToInt32(dt.Rows[i]["sto_toptan_vergi"]);
                vergiOran = Convert.ToInt32(dt.Rows[i]["vergi_orani"]);
                cariKod = dt.Rows[i]["cari_kod"].ToString();
                farktutari = Convert.ToDecimal(dt.Rows[i]["fark_tutari"]);
                vade = Convert.ToInt32(dt.Rows[i]["vade"]);
                plasiyer = dt.Rows[i]["cari_temsilci_kodu"].ToString();
                depo = Convert.ToInt32(dt.Rows[i]["depo_no"]);

                kdvTutarlari[vergiId] += (farktutari * vergiOran / 100);
                aratoplam += farktutari;
                meblag += (farktutari * ((100 + Convert.ToDecimal(vergiOran)) / 100));
            }

            List<decimal> vergiler = new List<decimal>();
            foreach (decimal item in kdvTutarlari.Values)
                vergiler.Add(item);

            int charRecId = CharEkle(trn, evrakSeri, evrakSira, evrakTarihi, meblag, vergiler.ToArray(), plasiyer, cariKod, aratoplam, belgeNo, vade, "");


            //stok hareket
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                vergiOran = Convert.ToInt32(dt.Rows[i]["vergi_orani"]);

                if (Config.GetConfig.GetValue(Parametre.faturaDetayli, "Hayır") == "Evet")
                {
                    stokkod = KdvStokKodu(vergiOran);
                }
                else
                {
                    stokkod = dt.Rows[i]["sto_kod"].ToString();
                }
                vergiId = Convert.ToInt32(dt.Rows[i]["sto_toptan_vergi"]);

                cariKod = dt.Rows[i]["cari_kod"].ToString();
                miktar = Convert.ToDecimal(dt.Rows[i]["sth_miktar"]);
                farktutari = Convert.ToDecimal(dt.Rows[i]["fark_tutari"]);
                vade = Convert.ToInt32(dt.Rows[i]["vade"]);
                plasiyer = dt.Rows[i]["cari_temsilci_kodu"].ToString();
                depo = Convert.ToInt32(dt.Rows[i]["depo_no"]);

                SharEkle(trn, evrakSeri, evrakSira, evrakTarihi, i, stokkod, cariKod, plasiyer, miktar, farktutari, vergiId, (farktutari * vergiOran / 100), charRecId, depo);
            }

            EvrakDokumAciklamalari(evrakSeri, evrakSira, aciklama, trn);

            trn.Commit();
        }

        public void FaturaStateChange(string id, string seri, int sira, DateTime tarih)
        {
            SqlParameter prmTarih = new SqlParameter("@tarih", SqlDbType.DateTime);
            SqlParameter prmID = new SqlParameter("@prm", SqlDbType.Int);
            prmTarih.Value = tarih;
            if (!string.IsNullOrEmpty(id))
            {
                if (id.IndexOf(',') > -1)
                {
                    foreach (string item in id.Split(','))
                    {
                        prmID.Value = int.Parse(item);
                        Factory.GetFactory.ExecuteNonQuery(CommandType.Text, string.Format("UPDATE    FIYAT_FARKI_KESILEN_EVRAKLAR SET  cha_kesildi = 1,evrak_seri='{0}',evrak_sira={1},cha_tarih=@tarih  WHERE     (cha_RECno = @prm)", seri, sira), prmTarih, prmID);
                    }
                }
                else
                {
                    prmID.Value = int.Parse(id);
                    Factory.GetFactory.ExecuteNonQuery(CommandType.Text, string.Format("UPDATE    FIYAT_FARKI_KESILEN_EVRAKLAR SET  cha_kesildi = 1,evrak_seri='{0}',evrak_sira={1},cha_tarih=@tarih  WHERE     (cha_RECno = @prm)", seri, sira), prmTarih, prmID);
                }
            }
        }

        public void FaturaYenidenAktar(string id)
        {
            Factory.GetFactory.ExecuteNonQuery(CommandType.Text, "DELETE  FROM   FIYAT_FARKI_FATURA_DETAYLARI WHERE (cha_RECno = @prm)", new SqlParameter("@prm", int.Parse(id)));
            Factory.GetFactory.ExecuteNonQuery(CommandType.Text, "DELETE  FROM  FIYAT_FARKI_KESILEN_EVRAKLAR WHERE (cha_RECno = @prm)", new SqlParameter("@prm", int.Parse(id)));
        }

        public static string Mid(string str, int Start)
        {
            string str2;
            try
            {
                if (str == null)
                {
                    return null;
                }
                str2 = Mid(str, Start, str.Length);
            }
            catch (Exception exception)
            {
                throw exception;
            }
            return str2;
        }

        public static string Mid(string str, int Start, int Length)
        {
            if (Start <= 0)
            {

            }
            if (Length < 0)
            {

            }
            if ((Length == 0) || (str == null))
            {
                return "";
            }
            int length = str.Length;
            if (Start > length)
            {
                return "";
            }
            if ((Start + Length) > length)
            {
                return str.Substring(Start - 1);
            }
            return str.Substring(Start - 1, Length);
        }

        void EvrakDokumAciklamalari(string seri, int sira, string aciklama, SqlTransaction trn)
        {
            string aciklamalar = aciklama;
            string satir1 = "";
            string satir2 = "";
            string satir3 = "";
            string satir4 = "";
            string satir5 = "";

            if (aciklamalar.Length <= 101)
            {
                satir1 = Mid(aciklama, 1, 100);
            }
            else if (aciklamalar.Length <= 201)
            {
                satir1 = Mid(aciklama, 1, 100);
                satir2 = Mid(aciklama, 101, 100);
            }
            else if (aciklamalar.Length <= 301)
            {
                satir1 = Mid(aciklama, 1, 100);
                satir2 = Mid(aciklama, 101, 100);
                satir3 = Mid(aciklama, 201, 100);
            }
            else if (aciklamalar.Length <= 401)
            {
                satir1 = Mid(aciklama, 1, 100);
                satir2 = Mid(aciklama, 101, 100);
                satir3 = Mid(aciklama, 201, 100);
                satir4 = Mid(aciklama, 301, 100);
            }
            else if (aciklamalar.Length <= 501)
            {
                satir1 = Mid(aciklama, 1, 100);
                satir2 = Mid(aciklama, 101, 100);
                satir3 = Mid(aciklama, 201, 100);
                satir4 = Mid(aciklama, 301, 100);
                satir5 = Mid(aciklama, 401, 100);
            }

            string tarih = string.Format("{0}-{1}-{2} {3}:{4}:{5}", DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second);

            Factory.GetFactory.ExecuteNonQuery(CommandType.Text, string.Format("if not exists(SELECT     egk_RECno  FROM         EVRAK_ACIKLAMALARI WHERE     (egk_dosyano = 51) AND (egk_hareket_tip = 0) AND (egk_evr_tip = 63) AND (egk_evr_seri = '{1}') AND (egk_evr_sira = {2})) INSERT INTO EVRAK_ACIKLAMALARI (egk_RECid_DBCno,egk_RECid_RECno,egk_SpecRECno,egk_iptal,egk_fileid,egk_hidden,egk_kilitli,egk_degisti,egk_checksum,egk_create_user,egk_create_date,egk_lastup_user,egk_lastup_date,egk_special1,egk_special2,egk_special3,egk_dosyano,egk_hareket_tip,egk_evr_tip,egk_evr_seri,egk_evr_sira,egk_evr_ustkod,egk_evr_doksayisi,egk_evracik1,egk_evracik2,egk_evracik3,egk_evracik4,egk_evracik5,egk_evracik6,egk_evracik7,egk_evracik8,egk_evracik9,egk_evracik10,egk_sipgenkarorani) VALUES(0,-99,0,0,66,0,0,0,0,1,'{0}',1,'{0}','','','',51,0,63,'{1}',{2},'',0,'{3}','{4}','{5}','{6}','{5}','','','','','',0);UPDATE EVRAK_ACIKLAMALARI SET egk_RECid_RECno=egk_RECno Where egk_RECno = SCOPE_IDENTITY()", tarih, seri, sira, satir1, satir2, satir3, satir4, satir5), trn);
        }

        public int MaxSira(string seri)
        {
            return Convert.ToInt32(Factory.GetFactory.ExecuteScaler(string.Format("exec sp_executesql N'SELECT     ISNULL(MAX(cha_evrakno_sira), 0) + 1 AS sira FROM         CARI_HESAP_HAREKETLERI WHERE     (cha_tip = 0) AND (cha_cinsi = 15) AND (cha_normal_Iade = 1) AND (cha_evrak_tip = 63) AND (cha_evrakno_seri = ''{0}'')'", seri)));
        }

        #region IDisposable Members

        public void Dispose()
        {
            GC.SuppressFinalize(this);
        }

        #endregion
    }
}
